Data compression is a tool for storing and transmitting large amounts of data. For example, the time required to transmit an image, such as a network transmission of a document, is reduced drastically when compression is used to decrease the number of bits required to recreate the image. Many different data compression techniques exist, such as Huffman coding and arithmetic coding. In particular, arithmetic coding is a well-known compression technique that is used in some data coding and compression systems to reduce the number of bits or symbols required for transmission or storage. For instance, an arithmetic encoder receives an input, which includes a sequence of events (e.g., binary events), or symbols, and the encoder encodes the input sequence into a corresponding sequence of bits or bytes. In some cases, fewer data bits are produced at the encoder output than are received at the encoder input, resulting in data compression. An arithmetic decoder may then receive or access the encoded data, and decodes the sequence of encoded data to produce the original data. Compression ratios of events/symbols to information bits being encoded may reach 64:1 or even 128:1, depending on the probability distribution of the events.
Accordingly, arithmetic coding plays an important role in modern compression systems, such as being used in various compression standards (e.g., JPEG 2000, H.264, MPEG, etc.) to efficiently compress bit streams. There are many variances of arithmetic coder (such as the “Q-Coder,” “MQ-Coder,” “QM-Coder,” etc.), which each need to establish one probability model. That is, probability estimation is vital for the success of any arithmetic coding technique. Currently, there are certain well-known probability tables that target all types of data/systems and that are widely used. These “one-for-all” tables are typically based on a generic theoretical probability model, and have achieved acceptable compression ratios across the many different types of data.